import axios from "axios";
import { ElMessage } from 'element-plus';
import router from '@/router';
import {tokenStore} from "@/stores/token.js";
import {userStore} from "@/stores/user.js";


const service = axios.create({
    baseURL: import.meta.env.VITE_SERVER_ADDR,
});

//添加请求拦截器
service.interceptors.request.use(function (config) {
    // 获得pinia对象
    let userToken = tokenStore();
    // 在发送请求之前做些什么
    if (userToken.tokenStr) {
        config.headers.token = userToken.tokenStr;
    }
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});



service.interceptors.response.use(resp => {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    // console.log("请求头“",resp.headers.token)
    // 设置新token
    // 获得pinia对象
    let userToken = tokenStore()
    if (resp.headers.token) {
        userToken.updateToken(resp.headers.token)
    }

    return resp.data;
}, error => {
    // 超出 2xx 范围的状态码都会触发该函数。
    //令牌出现问题重新登录
    if (error.response.status === 403) {
        ElMessage.error({
            message: '令牌问题，请重新登录',
            type: 'error'
        });
        let userToken = tokenStore();
        let user = userStore()
        userToken.$reset()
        user.$reset()
    }
    //跳转到登录页
    // router.replace('/admin/login');
    let path = router.currentRoute.value.path;
    if (path.startsWith('/admin')) {
        router.replace('/admin/login')
    } else {
        router.replace('/user/login')
    }
    return Promise.reject(error.response);
});

// 开启coike
// service.defaults.withCredentials = true;


export default service;